%%%Lijn invoegen en loadflow uitvoeren
function boe = alleen_lijn(bus)%bus is een string
%ergens originele problemen per bus opslaan
%load origineel
%originele gegevens laden en terug opslaan in andere naam:
load problemen;
sectoren_namen;
belastingsbussen_14;
probleem_origineel = eval(bus);%om de originele kosten weg te schrijven wordt er een kopie genomen.
originele_data_bus = probleem_origineel;

teller_oplossing_fout = 1;
for b = 1:1:size(eval(bus),1)
    
% temp = eval(bus);
kost = 0;
probleem = eval(bus);
temp = probleem;
busnummer = probleem(1,2);

teller = 1;

alle_mogelijke_lijnen = mogelijke_lijnen(probleem(b,2));
aantal_mogelijke_lijnen = size(alle_mogelijke_lijnen,2);
%lijn kiezen -> klopt niet!!!!
for l = alle_mogelijke_lijnen;
    bussen_invoegen_14;
    if l==1
        %ook aangeven welke lijn er bijgetrokken is
        temp2 = zeros(aantal_mogelijke_lijnen+1,aantal_sectoren+1);
    end
%lijn parallel hangen met bestaande lijn, verbonden met bus
%checken welke fout de dip/onderbreking veroorzaakt
type_fout = probleem(b,7);
locatie_fout = probleem(b,1);
%lijnfout
if type_fout == 1
    filename = sprintf('bus%03d',locatie_fout);

%busfout    
elseif type_fout == 2
    filename = sprintf('busfout%03d',locatie_fout);

%afgeknapte lijnen    
elseif type_fout == 3
    filename = sprintf('lijn_uit%03d',locatie_fout);
    
%trafofout
elseif type_fout == 4
    filename = sprintf('trafofout%03d',locatie_fout);

end

eval(filename);
filename = [filename,'.m'];
fout = probleem(b,1);

if fout ~= l
    
    Line.con(l,8) = Line.con(l,8)/2;
    Line.con(l,9) = Line.con(l,9)/2;
    Line.con(l,10) = Line.con(l,10)*2;
    
else 
    Line.con(l,16) = 1;
    %fout_bijgepast = 1;
end

make_psatfile;
pause(5);
lijnfout_14_index(fout,fout);
dips_duur_type_alle_fouten(fout,fout);
load lijnfout

%if teller ~=1
for ll = belastingsbussen'
%     if ll~=busnummer
    busnummerstr = num2str(ll);
    w = ['problemen_bus_',busnummerstr];
    if exist(w)==1
    temp = eval(w);
    temp(:,1:size(temp,2)) = [];
    eval([w ' = temp']);
    end
end
% end

%%clearen!!!
problemen_per_bus;

%probleem = eval(bus);
%kosten incidenten berekenen:
kosten_incidenten;

% %kosten sectoren berekenen:
kosten_per_sector;

%save alleen_lijn eval(v) -append;

    
%save alleen_lijn 
busnummerstr = num2str(busnummer);
v = ['problemen_bus_',busnummerstr];
temp = eval(v);
size(temp);

if locatie_fout == temp(b,1)
temp2(1,1:aantal_sectoren) = originele_data_bus(b,8:aantal_sectoren+7);
temp2(teller+1,1:aantal_sectoren) = temp(b,8:aantal_sectoren+7);
temp2(teller+1,aantal_sectoren+1) = l;
teller = teller+ 1;
end
%originele kosten opslaan -> index 1 klopt?
% temp2(1,1:aantal_sectoren) = temp(1,8:aantal_sectoren+7);
% temp2(teller+1,1:aantal_sectoren) = temp(teller+1,8:aantal_sectoren+7);
% temp2(teller+1,aantal_sectoren+1) = l;
% teller = teller+ 1;



end


teller_oplossing = 1;
oplossing.totale_kost(teller_oplossing_fout,:) = temp2(1,1:(size(temp2,2)-1));
for ii = 1:1:aantal_sectoren
    for ll = 2:1:size(temp2,1)
    %temp bevat de originele kosten per sector -> budget
    if temp2(ll,ii) <=  temp2(1,ii)
        
        bus1 = Line.con(temp2(ll,aantal_sectoren+1),1);
        bus2 = Line.con(temp2(ll,aantal_sectoren+1),2);
        budget = temp2(1,ii);
        kost_lijn_toevoegen = 0;%kost_lijn(bus1,bus2);
        nieuwe_kost = temp2(ll,ii) + kost_lijn_toevoegen;
        
        if (nieuwe_kost<=budget) && (nieuwe_kost<oplossing.totale_kost(teller_oplossing_fout,teller_oplossing))
           
            %alle oplossingen opslaan in een stucture.
            %wat opslaan?: type fout, getroffen bus, locatie fout,
            %uiteindelijke kost, voorgestelde oplossingen.
            oplossing.bus(teller_oplossing_fout,teller_oplossing) = busnummer;
            oplossing.sector(teller_oplossing_fout,teller_oplossing) = ii; %uit array halen!!!
            oplossing.typefout(teller_oplossing_fout,teller_oplossing) = type_fout;
            oplossing.locatiefout(teller_oplossing_fout,teller_oplossing) = locatie_fout;
            oplossing.kost_investering(teller_oplossing_fout,teller_oplossing) = kost_lijn_toevoegen;
            oplossing.totale_kost(teller_oplossing_fout,teller_oplossing) = nieuwe_kost;
            oplossing.kost_pq(teller_oplossing_fout,teller_oplossing) = temp2(ll,ii);
            oplossing.investering(teller_oplossing_fout,teller_oplossing) = nieuwe_kost;
            oplossing.locatieinvestering(teller_oplossing_fout,teller_oplossing) = temp2(ll,(aantal_sectoren+1));
            
        end
    end
    end
    teller_oplossing = teller_oplossing + 1;
end
teller_oplossing_fout = teller_oplossing_fout + 1;
% save alleen_lijn temp2;

end
save alleen_lijn oplossing temp2;